package code.example.base.collection.map;

import code.example.tool.LogFactory;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.BiConsumer;

/**
 *  TreeMap 基于红黑二叉树的Map的实现。
 *
 *  key.compareTo 或 Comparator.compare(o1,o2) == 0 ,确认key相同的。
 *  key需要实现Comparable ,或实例化TreeMap时指定用于排序的Comparator
 *  Tree的根节点为 key排序后的中间的key. 左侧是小的，右侧中大的。
 *
 *  如put 的key ,由 1--》100，即顺序依次变大，普通的二叉树（如果以第一个put的为root(根)），则会生成一面倒的二叉树（每个节点只有右侧节点），这
 *   种并不能提升get效率，相当于链表了。 而红黑树通过左旋（rotateLeft）、右旋（rotateRight） 这棵树，将根(root) ==中间点，达到快速查询（get）的目的。
 *
 */
public class TestTreeMap {
    public void test(){
        Map<Integer,Integer > map = new TreeMap<Integer,Integer>();
        for(int i=0;i<100;i++){
            map.put(i,Integer.reverse(i));
        }

        map.forEach(new BiConsumer<Integer, Integer>() {
            @Override
            public void accept(Integer key, Integer value) {
                LogFactory.getLog().info("key:"+key+",value:"+value+" ,key:"+Integer.toBinaryString(key)+",value:"+Integer.toBinaryString(value));
            }
        });
    }
    public static void main(String [] args){
        new TestTreeMap().test();
    }
}
